// 文件名：CargoShip.h
#pragma once
#include "SpaceAsset.h"

/**
 * CargoShip
 * 派生自 SpaceAsset，表示一艘往返火星的货运飞船。
 * 可记录最大载重、当前状态以及所运货物。
 */
class CargoShip : public SpaceAsset
{
public:
    /**
     * 构造函数
     * @param id      飞船唯一编号（如 "C001"）
     * @param maxLoad 最大载重量，单位：千克 (kg)
     * @param cargo   货物类型描述，默认为 "General"
     * @param status  当前状态字符串，默认为 "Ready"
     */
    CargoShip(std::string id, double maxLoad, std::string cargo = "General", std::string status = "Ready")
        : SpaceAsset(id),
          m_maxLoad(maxLoad),
          m_cargo(cargo),
          m_status(status)
    {
    }

    // === 必须实现的基类接口 ===
    // 返回固定字符串 "CargoShip"
    std::string type() const override
    {
        //======Begin======
        return "CargoShip";
        //=======End=======
    }
    // 控制台打印飞船详情
    void report() const override
    {
        //======Begin======
        std::cout << "[CargoShip]  ID=" << m_id
                  << "  MaxLoad=" << m_maxLoad << "kg"
                  << "  Status=" << m_status
                  << "  Cargo=" << m_cargo << '\n';
        //=======End=======
    }
    // 序列化到输出流
    void save(std::ostream &os) const override
    {
        
    }

    // === 业务行为 ===
    // 将状态设为 "Launched"
    void launch();
    // 将状态设为 "Landed"
    void land();
    // 将货物类型设为 "Empty"

    void unload();

private:
    double m_maxLoad;     //!< 最大载重量 (kg)
    std::string m_cargo;  //!< 当前货物描述
    std::string m_status; //!< 当前状态字符串
};